from langchain_community.document_loaders.csv_loader import CSVLoader
from langchain_community.document_loaders import UnstructuredExcelLoader
from crewai.tools import BaseTool
from crewai import Agent, Task, Crew, LLM, Process

#loader = CSVLoader(file_path="/Data/学生信息.xlsx")
# loader = UnstructuredExcelLoader(file_path="/Data/学生信息.xlsx")
file_path="/Data/学生信息.xlsx"

class ExcelLoaderTool(BaseTool):
    name: str = "ExcelLoaderTool"
    description: str = "A tool to load data from a predefined Excel file using UnstructuredExcelLoader."

    def _run(self) -> str:
        """Load data from the predefined Excel file."""
        try:
            # 固定的文件路径
            file_path = file_path
            loader = UnstructuredExcelLoader(file_path=file_path)
            data = loader.load()
            # 将数据转换为字符串格式返回（这里可以根据需要调整返回格式）
            return str(data)
        except Exception as e:
            return f"Error loading Excel file: {str(e)}"



# 定义具有角色和目标的代理
analyst = Agent(
  role='高级数据分析师',
  goal='加载数据集并从数据中提供见解',
  backstory="""您在一家电信公司工作。
  您的专长是从可用数据中识别趋势和分析。
  您擅长剖析复杂数据并提供可操作的见解。""",
  verbose=True,
  allow_delegation=False
)

writer = Agent(
  role='数据内容策划师',
  goal='从数据中制作引人入胜的内容',
  backstory="""您是一位著名的数据作家，以
  您对数据集的深入见解和引人入胜的文章而闻名。
  您将复杂的概念转化为引人入胜的叙述。""",
  verbose=True,
  allow_delegation=False,
)

# 为我们的代理创建任务
task1 = Task(
  description="""使用提供的工具从数据集中进行全面分析。
  您只需要运行工具，而无需提供任何输入，因为工具已经嵌入了源数据路径。
  确定与成绩相关的任何分析。""",
  agent=analyst,
  expected_output="完整的分析报告，包括成绩相关的分析结果",
  tools = [ExcelLoaderTool]
)

task2 = Task(
  description="""根据提供的见解，开发一个引人入胜的博客
  文章，以突出您的发现。
  
  您的文章应该对普通人来说具有信息性，不要让它听起来像是AI。
  您的最终答案必须是至少3段的完整博客文章。""",
  expected_output="一个引人入胜的博客文章，以突出您的发现",
  agent=writer
)

crew = Crew(
  agents=[analyst, writer],
  tasks=[task1, task2],
  verbose=True,
)

result = crew.kickoff()
print(result)
